package test.fr.lna.sandbox;

import org.apache.log4j.Logger;


/**
 * Un peu d'exercice...
 * 
 * @author Rouviere_x
 *
 */
public abstract class Matrice<E extends MatObj> {

	protected Logger log= Logger.getLogger(getClass());
	private E[][] matrice;
	private int size;
	
	/**
	 * Matrice carré.
	 * 
	 * @param size
	 */
	public Matrice(int size) {
		matrice = buildMatrice(size);
		this.size = size;
	}
	
	/**
	 * Renvoie l'élément à la position c
	 * @param c
	 * @return
	 */
	public E get(CoordXY c) {
		return matrice[c.getX()][c.getY()];
	}
	/**
	 * La construction sera plus simple à faire dans la classe fille.
	 * @param size
	 * @return
	 */
	protected abstract E[][] buildMatrice(int size);
	
	/**
	 * Boucle de lecture de la matrice
	 */
	public void print() {
		assert matrice != null;	
		String line = new String();
		String board = new String("\n");
		for(int i=0; i<size; i++) {
			for(int j=0; j<size; j++) {
				E elem = matrice[i][j];
				if (elem != null) {
					line += ", "+elem.description();
				} else {
					line += ", o";
				}
			}
			board += line.substring(1) + "\n";
			line = new String();
		}
		log.info(board);
	}
	
	/**
	 * Indique si la case est vide.
	 * 
	 * @param x
	 * @param y
	 * @return true si la case est vide
	 */
	public boolean isVide(int x, int y) {
		return matrice[x][y] == null;
	}
}
